# 字典就是java中的map
# 不可变数据类型可以作为字典的key。
# 不可变数据类型不可以作为字典的key（list）。


####################################################################### 字典类型的创建
d = {10: 'java', 20: 'python', 30: 'sql', 20: 'flink'}
print(d)

# zip函数将讲个数组转换为字典
list1 = [1, 2, 3]
list2 = ['上海', '杭州', '北京', '苏州']
# 1.使用zip函数
zipped = zip(list1, list2)
print(zipped)
# print(list(zipped))
# 2.使用dict函数
d = dict(zipped)
print(d)

# 使用参数创建字典，左边是key，右边是value
d = (dict(cat=10, dog=20))
print(d)

################################################################ 字典属于序列
print('max:', max(d))
print('min:', min(d))
print('len:', len(d))

#####################################################################字典取值

# 字典的取值
print(d['cat'])
print(d.get('dog'))

# 二者区别，如果key不存在，d[key]报错，d.get(key)可以指定默认值
# 由于hhhhh不存在，输出ooooooo
print(d.get('hhhhh', 'ooooooo'))

######################################################################字典循环

# key=value组成一个元素
for item in (d.items()):
    print(item)

# for循环分别获取key和value输出
for key, value in d.items():
    print(key, ':', value)

##############################################################字典的相关操作方法
d.keys()
d.values()
# key存在获取相应的value，同时删除key-value对，否则获取默认值
# d.pop(key,default)
# 随机从字典中取出一个key-value对，结果为元素类型，同时将该key-value从字典中删除
d.popitem()
# 清空字典
d.clear()

# 向字典中添加元素
d[1005] = 'zhanglili'
print(d)
keys = d.keys()
print(keys)
print(list(keys))
print(tuple(keys))

values = d.values()
# dict_values类型
print(values)
print(list(values))
print(tuple(values))

# 如果将字典中的数据转成key-value的形式，以元组的方式进行展现
list3 = list(d.items())
# 类似一个和zip的动作是一个相反的动作
print(list3)

d.clear()
# python中一切接对象，每个对象都有一个bool值
print(bool(d))

####################################################################字典生成式

# d={key:value for item in range}
# d={ item :random.randint(1,100) for item in range(4)}
# print(d)


# d={key:value for key,value in zip(list1,list2)}
list1 = [1001, 1002, 1003]
list2 = ['张三', '李四', '王五']
d = {key: value for key, value in zip(list1, list2)}
print(d)

###############################################################合并字典
d1 = {'a': 10, 'b': 20}
d2 = {'c': 30, 'd': 40}
print(d1 | d2)
